package sjtu.ist.warehouse4ws.tool.file;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Enumeration;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;

public class ModelPackage {
	//各种模型文件集合
	public ArrayList<File> processFiles=new ArrayList<File>();
	public ArrayList<File> epcFiles=new ArrayList<File>();
	public ArrayList<File> functionFiles=new ArrayList<File>();
	public ArrayList<File> organizationFiles=new ArrayList<File>();
	public ArrayList<File> domainFiles=new ArrayList<File>();
	
	public ModelPackage(){
		
	}
	
	/**
	 * 
	 * @param zipPackage
	 * 		需要解压的压缩文件
	 * @param dest
	 * 		解压后的文件存放位置
	 */
	public ModelPackage(File zipPackage,String dest){
		unzipPackage(zipPackage,dest);
	}
	
	//解压压缩文件，获得模型文件集合
	public void unzipPackage(File file,String dest){
		int length;
		byte b[] = new byte[1024];

		try {
			ZipFile zipFile = new ZipFile(file,"GBK");
			String fileName=file.getName();
			System.out.println("encoding:"+zipFile.getEncoding());
			Enumeration enumeration = zipFile.getEntries();
			ZipEntry zipEntry = null;

			while (enumeration.hasMoreElements()) {
				zipEntry = (ZipEntry) enumeration.nextElement();
				File loadFile = new File(dest + zipEntry.getName());
				
				if (zipEntry.isDirectory()) {
					// 这段都可以不要，因为每次都貌似从最底层开始遍历的
					loadFile.mkdirs();
				} else {
					if (!loadFile.getParentFile().exists())
						loadFile.getParentFile().mkdirs();

					FileOutputStream outputStream = new FileOutputStream(loadFile);
					//CnZipOutputStream zos = new CnZipOutputStream(os,"gbk"); //加上中文编码类型
					InputStream inputStream = zipFile.getInputStream(zipEntry);

					while ((length = inputStream.read(b)) > 0){
						outputStream.write(b, 0, length);
					}
					
					//根据文件夹名字判断模型类型
					//文件夹名如果有错误，直接在下面修改
					String dir=loadFile.getParentFile().getAbsolutePath();
					if(dir.contains("\\功能视图\\processes") && loadFile.isFile()){
						processFiles.add(loadFile);
					}else if(dir.contains("\\控制视图\\epc") && loadFile.isFile()){
						epcFiles.add(loadFile);
					}else if(dir.contains("\\功能视图\\functions") && loadFile.isFile()){
						functionFiles.add(loadFile);
					}else if(dir.contains("\\组织视图") && loadFile.getAbsolutePath().endsWith(".org")){
						organizationFiles.add(loadFile);
					}else if(dir.contains("\\业务对象视图\\models") && loadFile.isFile()){
						domainFiles.add(loadFile);
					}

				}
			}
			System.out.println(processFiles.size()+"\t"+functionFiles.size()+"\t"+organizationFiles.size()+"\t"+epcFiles.size()+"\t"+domainFiles.size()+"\t");
			System.out.println(" 文件解压成功: "+dest);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
